home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr49 / 136_01.zip / TERMINAL.C < prev    next >
Text File  |  1993-06-01  |  9KB  |  430 lines

  1. /*    HEADER:  CUG136.03;
  2.     TITLE:        TERMINAL;
  3.     VERSION:    1.00;
  4.     DATE:        4/24/1984;
  5.     DESCRIPTION:    "Terminal installation program";
  6.     KEYWORDS:    terminal interface,installation,configuration;
  7.     SYSTEM:        CP/M;
  8.     FILENAME:    TERMINAL.C;
  9.     AUTHORS:    R. Rodman;
  10.     COMPILERS:    C/80;
  11. */
  12.  
  13. /* TERMINAL - terminal configuration program
  14.  
  15.     831123 rr convert to c 1.002
  16.     840206 rr make it work if terminal.sys doesn't exist 1.003
  17.     840424 rr put library in program 1.004 */
  18.  
  19. /* compile: c -c2000 terminal */
  20.  
  21. char trmbuf[ 128 ];
  22. char *trmdat[ 16 ];
  23.  
  24. /* width height defint uselst sndfst method xadd yadd
  25.     inistr clrscn clreos clreol curoff curon curbeg
  26.     curmid curend hiint lowint revvid norvid inslin dellin */
  27.  
  28. char *library[ 16 ][ 17 ] = {
  29.     "ANSI",        "\120\030HNY1\001\001",
  30.         "", "\033[2J", "\033[J", "\033[K", "", "", "\033[",
  31.         ";", "H", "\033[2m", "\033[0m", "\033[7m", "\033[0m", "\033[L",
  32.         "\033[M",
  33.     "Televideo 950", "\120\030HNY0\040\040",
  34.         "", "\032", "\033Y", "\033T", "\033.0", "\033.2", "\033=",
  35.         "", "", "\033(", "\033)", "\033G4", "\033G0", "\033E", "\033R",
  36.     "Televideo 912/920", "\120\030HNY0\040\040",
  37.         "", "\032", "\033Y", "\033T", "", "", "\033=",
  38.         "", "", "\033(", "\033)", "\033j", "\033k", "\033E", "\033R",
  39.     "Osborne I", "\064\030HNY0\040\040",
  40.         "", "\032", "\033Y", "\033T", "", "", "\033=",
  41.         "", "", "\033(", "\033)", "", "", "\033E", "\033R",
  42.     "Beehive", "\120\030HNY0\040\040",
  43.         "", "\033X\033E", "\033J", "\033K", "", "", "\033F",
  44.         "", "", "\033W", "\033X", "", "", "", "",
  45.     "ADM-3A", "\120\030HNY0\040\040",
  46.         "", "\032", "", "", "", "", "\033=",
  47.         "", "", "", "", "", "", "", "",
  48.     "Soroc IQ-120", "\120\030HNY0\040\040",
  49.         "", "\033*", "\033Y", "\033T", "", "", "\033=",
  50.         "", "", "\033(", "\033)", "", "", "", "",
  51.     "Hazeltine 1400/1500", "\120\030LNX0\000\140",
  52.         "", "\033\014", "\033\030", "\033\017", "", "", "\033\021",
  53.         "", "", "\033\031", "\033\037", "", "", "\033\032", "\033\023",
  54.     "Perkin-Elmer Fox", "\120\030HNX0\040\040",
  55.         "", "\033K", "\033J", "\033I", "", "", "\033X",
  56.         "\033Y", "", "", "", "", "", "", "",
  57.     "ADDS Regent 20", "\120\030HNY0\040\040",
  58.         "", "\014", "", "\033K", "", "", "\033Y",
  59.         "", "", "", "", "", "", "", "",
  60.     "IBM 3101", "\120\030HNY0\040\040",
  61.         "", "\033L", "\033J", "\033I", "", "", "\033Y",
  62.         "", "", "", "", "", "", "\033N", "\033O",
  63.     "Intertube", "\120\030HNY0\040\040",
  64.         "", "\014", "\033k", "\033K", "", "", "\033Y",
  65.         "", "", "", "", "", "", "", "",
  66.     "Visual 200", "\120\030HNY0\040\040",
  67.         "", "\033v", "\033y", "\033x", "", "", "\033Y",
  68.         "", "", "\0333", "\0334", "\033s", "\033k", "\033L", "\033M",
  69.     "Heath H-19", "\120\030HNY0\040\040",
  70.         "", "\033E", "\033J", "\033K", "\033x5", "\033y5", "\033Y",
  71.         "", "", "", "", "\033p", "\033q", "\033L", "\033M",
  72.     "Datamedia", "\120\030HNX0\040\040",
  73.         "", "\014", "\013", "\035", "", "", "\036",
  74.         "", "", "\004", "\030", "", "", "", "",
  75.     "Intecolor 3602", "\100\037HNX0\000\000",
  76.         "", "\014", "", "", "", "", "\003",
  77.         "", "", "\021", "\022", "\025", "\026", "\033U", "\033V"
  78. };
  79.  
  80. main()
  81. {
  82.     char keyp;
  83.     int i;
  84.     char *p, *q, *r;
  85.  
  86.     puts( "Terminal Configuration Program v.1.004\n\n" );
  87.  
  88.     puts( "(1) Select terminal from library\n(2) Modify terminal (1/2):" );
  89.  
  90.     keyp = getch();
  91.  
  92.     switch( keyp ) {
  93.  
  94.         case '1' : {
  95.  
  96.             puts( "\n\n\n\n" );
  97.             for( i = 0; i <= 15; i++ ) {
  98.                 putchar( '(' );
  99.                 putchar( 'A' + i );
  100.                 puts( ") " );
  101.                 puts( library[ i ][ 0 ] );
  102.                 putchar( '\n' );
  103.             }
  104.  
  105.             keyp = '\0';
  106.             while( keyp < 'A' || keyp > 'P' ) {
  107.                 puts( "\nEnter selection (A-P): " );
  108.                 keyp = getch();
  109.                 if( keyp >= 'a' ) keyp -= 32;
  110.             }
  111.  
  112.             p = &trmbuf[ 0 ];
  113.  
  114.             for( i = 0; i <= 15; i++ ) {
  115.  
  116.                 trmdat[ i ] = p;
  117.  
  118. /* move library info into terminal buffer */
  119.  
  120.                 q = p;
  121.                 r = library[ keyp - 'A' ][ i + 1 ];
  122.  
  123.                 while( *r ) *q++ = *r++;
  124.  
  125.                 p++; p++; p++; p++;
  126.                 p++; p++; p++; p++;
  127.             }
  128.  
  129.             term_write();
  130.             break;
  131.         }
  132.  
  133.         case '2' : {
  134.             term_read();
  135.  
  136.             while( 1 ) {
  137.                 disp_rec();    /* display record */
  138.  
  139.                 puts( "\n(C) Change lines in above," );
  140.                 puts( " (X) Exit program (C/X): " );
  141.                 keyp = getch();
  142.                 if( keyp >= 'a' ) keyp -= 32;
  143.  
  144.                 switch( keyp ) {
  145.                     case 'C' : change_rec(); break;
  146.  
  147.                     case 'X' : term_write(); exit();
  148.  
  149.                     default : putchar( '\007' );
  150.                 }
  151.             }
  152.         }
  153.     }
  154. }
  155.  
  156.     /* read previous values of terminal file */
  157.  
  158. term_read()
  159. {
  160.     int t, u;
  161.     char *p;
  162.     t = fopen( "TERMINAL.SYS", "rb" );
  163.  
  164.     if( t == 0 ) {
  165.         puts( "TERMINAL.SYS doesn't exist as yet." );
  166.         for( u = 0; u < 128; ++u ) trmbuf[ u ] = '\0';
  167.     } else {
  168.         p = &trmbuf[ 0 ];
  169.         read( t, p, 128 );
  170.         fclose( t );
  171.     }
  172.  
  173.     p = &trmbuf[ 0 ];
  174.  
  175.     for( u = 0; u <= 15; u++ ) {
  176.         trmdat[ u ] = p;
  177.  
  178.         p++; p++; p++; p++;
  179.         p++; p++; p++; p++;
  180.     }
  181. }
  182.  
  183. puts( p )
  184. char *p;
  185. {
  186.     while( *p ) putchar( *p++ );
  187. }
  188.  
  189.     /* write out .sys file */
  190.  
  191. term_write()
  192. {
  193.     int t, u;
  194.     char *p;
  195.  
  196.     t = fopen( "TERMINAL.SYS", "wb" );
  197.     p = &trmbuf[ 0 ];
  198.     u = write( t, p, 128 );
  199.     if( u < 128 ) puts( "\n?Write error!" );
  200.     fclose( t );
  201. }
  202.  
  203.     /* print integer in decimal */
  204.  
  205. putd( i )
  206. int i;
  207. {
  208.     if( i > 99 ) putchar( '0' + i / 100 );
  209.         else putchar( ' ' );
  210.  
  211.     i %= 100;
  212.  
  213.     if( i > 9 ) putchar( '0' + i / 10 );
  214.         else putchar( ' ' );
  215.  
  216.     i %= 10;
  217.  
  218.     putchar( '0' + i );
  219. }
  220.  
  221.     /* input a number */
  222.  
  223. int getd()
  224. {
  225.     int i, j;
  226.     char c;
  227.  
  228.     i = 0;
  229.     j = 0;
  230.     while( ( c = getch() ) >= '0' && c <= '9' ) {
  231.         j++;
  232.         i = ( i * 10 ) + c - '0';
  233.     }
  234.  
  235.     if( j ) return( i );
  236.         else return( -1 );
  237. }
  238.  
  239.     /* display a record */
  240.  
  241. disp_rec()
  242. {
  243.     int ind, x;
  244.     char *p;
  245.  
  246.     puts( "\n\n\n" );
  247.  
  248.     for( ind = 1; ind <= 16; ind++ ) {
  249.         putd( ind );    
  250.         putchar( ' ' );
  251.  
  252.         switch( ind ) {
  253.             case 1 : puts( "  Screen Parameters " ); break;
  254.             case 2 : puts( "       Init. String " ); break;
  255.             case 3 : puts( "       Clear Screen " ); break;
  256.             case 4 : puts( "   Clear end screen " ); break;
  257.             case 5 : puts( "     Clear end line " ); break;
  258.             case 6 : puts( "         Cursor off " ); break;
  259.             case 7 : puts( "          Cursor on " ); break;
  260.             case 8 : puts( "    Address lead-in " ); break;
  261.             case 9 : puts( "  Address separator " ); break;
  262.             case 10 : puts( "    Address trailer " ); break;
  263.             case 11 : puts( " Begin Hi Intensity " ); break;
  264.             case 12 : puts( " Begin Lo Intensity " ); break;
  265.             case 13 : puts( "Begin Reverse Video " ); break;
  266.             case 14 : puts( "  End Reverse Video " ); break;
  267.             case 15 : puts( "        Insert Line " ); break;
  268.             case 16 : puts( "        Delete Line " ); break;
  269.         }
  270.  
  271.         if( ind == 1 ) {
  272.             p = trmdat[ 0 ];    /* get pointer */
  273.  
  274.             puts( "      Width:" );
  275.             putd( *p++ );
  276.             puts( "     Height:" );
  277.             putd( *p++ );
  278.             puts( "  Def. Int.:" );
  279.             putchar( *p++ );
  280.             puts( "\n                          Use Last:" );
  281.             putchar( *p++ );
  282.             puts( " Send first:" );
  283.             putchar( *p++ );
  284.             puts( "     Method:" );
  285.             putchar( *p++ );
  286.             puts( "\n                          X addend:" );
  287.             putd( *p++ );
  288.             puts( "   Y addend:" );
  289.             putd( *p++ );
  290.         } else {
  291.             p = trmdat[ ind - 1 ];
  292.  
  293.             while( *p ) {
  294.                 if( *p < ' ' ) {
  295.                     putchar( '^' );
  296.                     putchar( *p++ + 64 ); 
  297.                 } else putchar( *p++ );
  298.             }
  299.         }
  300.  
  301.         puts( "\n" );
  302.     }
  303. }
  304.  
  305.     /* change a record */
  306.  
  307. change_rec()
  308. {
  309.     int ind, x;
  310.     char c;
  311.     char *p;
  312.  
  313.     puts( "\nLine to change? " );
  314.     ind = getd();
  315.     if( ind < 0 ) return;
  316.  
  317.     puts( "\n(Press RETURN for defaults in parentheses)\n" );
  318.  
  319.     if( ind == 1 ) {
  320.         p = trmdat[ 0 ];
  321.  
  322.         puts( "\nWidth (" );
  323.         putd( *p );
  324.         puts( "): " );
  325.         ind = getd();
  326.         if( ind >= 0 ) *p = ind;
  327.         p++;
  328.  
  329.         puts( "\nHeight (" );
  330.         putd( *p );
  331.         puts( "): " );
  332.         ind = getd();
  333.         if( ind >= 0 ) *p = ind;
  334.         p++;
  335.  
  336.         puts( "\nDefault intensity (H or L) (" );
  337.         putchar( *p );
  338.         puts( "): " );
  339.         c = getch();
  340.         if( c == 'H' || c == 'L' ) *p = c;
  341.         p++;
  342.  
  343.         puts( "\nUse Last (Y or N) (" );
  344.         putchar( *p );
  345.         puts( "): " );
  346.         c = getch();
  347.         if( c == 'N' || c == 'Y' ) *p = c;
  348.         p++;
  349.  
  350.         puts( "\nSend first (X or Y) (" );
  351.         putchar( *p );
  352.         puts( "): " );
  353.         c = getch();
  354.         if( c == 'X' || c == 'Y' ) *p = c;
  355.         p++;
  356.  
  357.         puts( "\nMethod (0 or 1) (" );
  358.         putchar( *p );
  359.         puts( "): " );
  360.         c = getch();
  361.         if( c == '0' || c == '1' ) *p = c;
  362.         p++;
  363.  
  364.         puts( "\nX addend (" );
  365.         putd( *p );
  366.         puts( "): " );
  367.         ind = getd();
  368.         if( ind >= 0 ) *p = ind;
  369.         p++;
  370.  
  371.         puts( "\nY addend (" );
  372.         putd( *p );
  373.         puts( "): " );
  374.         ind = getd();
  375.         if( ind >= 0 ) *p = ind;
  376.         p++;
  377.     } else {
  378.         puts( "New value " );
  379.         puts( "(use ^ followed by capital for control characters," );
  380.         puts( "\nor press space bar to clear)\n(" );
  381.  
  382.         p = trmdat[ ind - 1 ];
  383.  
  384.         while( *p ) {
  385.             if( *p < ' ' ) {
  386.                 putchar( '^' );
  387.                 putchar( *p++ + 64 ); 
  388.             } else putchar( *p++ );
  389.         }
  390.  
  391.         puts( "): " );
  392.  
  393.         c = getch();        /* read first char */
  394.         if( c == '\r' ) return;    /* skip rest of input */
  395.  
  396.         p = trmdat[ ind - 1 ];
  397.  
  398.         for( x = 1; x <= 8; x++ )
  399.             *p++ = '\0';    /* null out record */
  400.  
  401.         if( c == ' ' ) return;    /* leave cleared out */
  402.  
  403.         p = trmdat[ ind - 1 ];
  404.  
  405.     /* now get from 1 to 7 characters */
  406.  
  407.         for( x = 1; x <= 7; x++ ) {
  408.             if( c == '^' ) c = getch() & 0x1f;
  409.             *p++ = c;
  410.             c = getch();
  411.             if( c == '\r' ) return;
  412.         }
  413.     }
  414. }
  415.  
  416.     /* get a char and duplex it */
  417.  
  418. int getch()
  419. {
  420.     int i;
  421.  
  422.     while( ! ( i = bdos( 6, 0xff )));
  423.     putchar( i );
  424.     return( i );
  425. }
  426.  
  427. #include "stdlib.c"
  428.  
  429.  
  430.